package com.yxc.easyexceldemo.annotations;

import com.yxc.easyexceldemo.const_enum.MEnum;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * 在使用easyExcel时，对枚举字段做数据转换
 *
 * @author: YXC
 * @time: 2022/11/16 14:45
 **/
// 运行时生效
@Retention(RetentionPolicy.RUNTIME)
// 字段注解
@Target(ElementType.FIELD)
public @interface EasyExcelEnumDataSource {

    Class<? extends MEnum> enumClass() default MEnum.class;

    Class<? extends EasyExcelEnumData> data() default EasyExcelEnumData.class;

    interface EasyExcelEnumData<N, C> {
        /**
         * 根据编码获取名字
         *
         * @author YXC
         * @date 2022/11/16 15:04
         * @param code: 编码
         * @return N
        **/
        N getNameByCode(C code);

        /**
         * 根据名字获取编码
         *
         * @author YXC
         * @date 2022/11/16 15:04
         * @param name: 名字
         * @return C
        **/
        C getCodeByName(N name);
    }
}
